package com.yupi.yuojbackendjudgeservice.rabbitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import lombok.extern.slf4j.Slf4j;

/**
 * 用于创建测试程序用到的交换机和队列（只用在程序启动前执行一次）
 */
@Slf4j
public class InitRabbitMq {

    public static void doInit(){
        try {
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost");
            //创建一个连接消息队列建立连接
            Connection connection = factory.newConnection();
            ///channel理解为操作消息队列的 client（比如 jdbcClient、redisClient），
            // 提供了和消息队列 server 建立通信的传输方法（为了复用连接，提高传输效率）。程序通过 channel 操作 rabbitmq（收发消息）
            Channel channel = connection.createChannel();
            //创建交换机作为用来转发消息  code_exchange交换机名称
            String EXCHANGE_NAME = "code_exchange";
            channel.exchangeDeclare(EXCHANGE_NAME, "direct");

            // 创建队列，随机分配一个队列名称 用于收消息和发消息 code_queue消息队列的名称
            String queueName = "code_queue";
            //queueName：消息队列名称（注意，同名称的消息队列，只能用同样的参数创建一次）
            channel.queueDeclare(queueName, true, false, false, null);
            //my_routingKey的作用就是作为一个标识和消息队列进行绑定 只有携带了这个标识才可以发到对应的消息队列
            channel.queueBind(queueName, EXCHANGE_NAME, "my_routingKey");
            log.info("消息队列启动成功");
        } catch (Exception e) {
            log.error("消息队列启动失败");
        }
    }

    public static void main(String[] args) {
        doInit();
    }
}
